package test;

import java.awt.Font;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.TextAnchor;

public class BarChart {
	ChartPanel frame1;
	
	public BarChart(String name, double math, double java, double sports) {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(math, "数学", "数学");// 数学成绩,定义图例和x坐标的文字
		dataset.addValue(java, "Java", "Java");
		dataset.addValue(sports, "体育", "体育");
		JFreeChart chart = ChartFactory.createBarChart3D(name+"的成绩柱状图", // 图表标题
				"考试科目", // 目录轴的显示标签
				"成绩", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向：水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				false, // 是否生成工具
				false // 是否生成URL链接
		);

		CategoryPlot plot = chart.getCategoryPlot();// 获取图表区域对象
		
		CategoryAxis domainAxis = plot.getDomainAxis(); // 水平底部列表
		domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 20)); // 考试科目
		domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 20)); // 科目
		
		ValueAxis rangeAxis = plot.getRangeAxis();// 获取柱状
		rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 20));		//成绩
		chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 20));	//图例
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 30));	//标题
		
		/*显示柱状图上的数值*/
		BarRenderer renderer = (BarRenderer) plot.getRenderer();    
        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        renderer.setBaseItemLabelFont(new Font("黑体", Font.PLAIN, 20));
        renderer.setBaseItemLabelsVisible(true);
        renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
        renderer.setItemLabelAnchorOffset(10D);

		frame1 = new ChartPanel(chart, true);
	}

	public ChartPanel getChartPanel() {
		return frame1;
	}
}